/* -*-jde-*- */
package app.util;

import app.conexion.Conexion;
import app.conexion.ConexionException;
import app.mail.Mail;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Nueva contrasenia El telefono asignado al usuario
 *
 * @author Victor Miguel Peralta Santa Anna
 * @since Enero 2012
 * @version 0.1
 */
public class NuevaContrasenia {

    /**
     * Cambiamos una contraseña
     *
     * @param susuario
     * @param contrasenia1
     * @param contrasenia2
     * @return
     * @throws appException
     */
    public static String cambiaContrasenia(String susuario, String correo, String contrasenia1, String contrasenia2) throws appException {
        try {

            if (!contrasenia1.equals(contrasenia2)) {
                throw new appException("No se puede establecer una nueva contraseña con esos datos.");
            }

            String query = "select getUsuarioCorreoPrimario('" + susuario + "');";

            Conexion con = new Conexion();

            ResultSet r = con.exec(query);

            r.next();

            String correoBase = r.getString("getUsuarioCorreoPrimario");

            if (correo.equals(correoBase)) {
                String query1 = "select setUsuarioContrasenia('" + susuario + "','" + contrasenia1 + "');";

                con.exec(query1);

                Mail.sendCambiaContrasenia(susuario, contrasenia1, correo);
            } else {

                throw new appException("No se puede establecer una nueva contraseña con esos datos.");
            }

            return contrasenia1;

        } catch (ConexionException ex) {
            Logger.getLogger(NuevaContrasenia.class.getName()).log(Level.SEVERE, null, ex);
            return "";
        } catch (SQLException ex) {
            Logger.getLogger(NuevaContrasenia.class.getName()).log(Level.SEVERE, null, ex);
            return "";
        }
    }

    /**
     * Mandamos una nueva contraseña al correo del usuario que se nos da por
     * entrada.
     *
     * @param susuario
     * @param correo
     * @return
     * @throws appException
     */
    public static String nuevaContrasenia(String susuario, String correo) throws appException {
        try {
            String contrasenia = new BigInteger(130, new SecureRandom()).toString(32).substring(0, 10);

            String query = "select getUsuarioCorreoPrimario('" + susuario + "');";

            Conexion con = new Conexion();

            ResultSet r = con.exec(query);

            r.next();

            String correoBase = r.getString("getUsuarioCorreoPrimario");

            if (correo.equals(correoBase)) {
                String query1 = "select setUsuarioContrasenia('" + susuario + "','" + contrasenia + "');";

                con.exec(query1);

                Mail.sendNuevaContrasenia(susuario, contrasenia, correo);
            } else {

                throw new appException("No se puede establecer una nueva contraseña con esos datos.");
            }

            return contrasenia;
        } catch (ConexionException ex) {
            Logger.getLogger(NuevaContrasenia.class.getName()).log(Level.SEVERE, null, ex);
            return "";
        } catch (SQLException ex) {
            Logger.getLogger(NuevaContrasenia.class.getName()).log(Level.SEVERE, null, ex);
            return "";
        }
    }

    public static void main(String args[]) throws ConexionException, appException {
        System.out.println(nuevaContrasenia("v1ctor", "v1ctor@ciencias.unam.mx"));
    }

    public static String cambiaContraseniaEmpresa(String susuario, String correo, String contrasenia1, String contrasenia2) throws appException {
        try {

            if (!contrasenia1.equals(contrasenia2)) {
                throw new appException("No se puede establecer una nueva contraseña con esos datos.");
            }

            String query = "select getUsuarioCorreoPrimarioEmpresa('" + susuario + "');";

            Conexion con = new Conexion();

            ResultSet r = con.exec(query);

            r.next();

            String correoBase = r.getString("getUsuarioCorreoPrimarioEmpresa");

            if (correo.equals(correoBase)) {
                String query1 = "select setUsuarioContrasenia('" + susuario + "','" + contrasenia1 + "');";

                con.exec(query1);

                Mail.sendCambiaContrasenia(susuario, contrasenia1, correo);
            } else {

                throw new appException("No se puede establecer una nueva contraseña con esos datos.");
            }

            return contrasenia1;

        } catch (ConexionException ex) {
            Logger.getLogger(NuevaContrasenia.class.getName()).log(Level.SEVERE, null, ex);
            return "";
        } catch (SQLException ex) {
            Logger.getLogger(NuevaContrasenia.class.getName()).log(Level.SEVERE, null, ex);
            return "";
        }
    }
}
